package cube.data.util;

/**
 * 格式化数组对象
 * 
 * @author abiao
 */
public abstract class ArrayFormat<T> {

    /**
     * 格式字符串缓存
     */
    private StringBuffer sb = new StringBuffer();

    /**
     * 格式化数组对象
     */
    public ArrayFormat(T[] data) {
        sb.append("[ ");
        for (int i = 0; i < data.length; i++) {
            sb.append(format(data[i]) + " ");
            handleFormatBeautiful(data, i);
        }
        sb.append("]");
    }

    /**
     * 整理数据为比较漂亮的格式
     */
    private void handleFormatBeautiful(T[] data, int i) {
        if (i % 16 == 7) {
            sb.append(" ");
        }
        if (i % 16 == 15 && i != data.length - 1) {
            sb.append("\n  ");
        }
    }

    /**
     * toString
     */
    public String toString() {
        return sb.toString();
    }

    /**
     * 按字符格式追加
     */
    public abstract String format(T t);
}
